package mt;

public class MT
{
	public Estado estados[];
	public Fita fita;
	public Estado atual;
	public Estado novo;

	public MT(Estado est[], String cadeia, String estadoInicial)
	{
		this.fita = new Fita(cadeia);
		this.estados = est;
		this.atual = getEstado(estadoInicial, est);
	}
	
	

	void iniciaMT()
	{
		while((fita.indice < this.fita.tamanho) && (!excecao.ExcecaoIndefinicao.getIndefinicao()))
		{
			this.novo = Fprograma.fPrograma(atual, this.estados, this.fita);
			this.atual = this.novo;
		}
		ehTerminal(atual);
		excecao.ExcecaoIndefinicao.setIndefinicao(false);
	}

	public static Estado getEstado(String nome, Estado est[])
	{
		for (int i = 0; i < est.length; i++)
		{
			if (est[i].nome.equals(nome))
				return est[i];
		}
		return null;
	}
	
	public static void setTerminal(String est_term[], Estado estados[])
	{
		for(int i = 0; i < est_term.length; i++)
		{
			getEstado(est_term[i], estados).terminal = true;
		}
	}

	public boolean ehTerminal(Estado est)
	{
		if (est.terminal)
		{
			return true;
		} else
		{
			return false;
		}
	}

}
